/**
 * 原价根据不同的条件得到新的价格
 * @param originalPrice
 * @param type
 * @returns
 */
const getPrice1 = (originalPrice: number, type: string) => {
  switch (type) {
    case 'pre-sale':
      return originalPrice * 0.8;
    case 'promotion':
      if (originalPrice < 100) {
        return originalPrice * 0.9;
      } else {
        return originalPrice - 15;
      }
    default:
      return originalPrice;
  }
};
const getPrice2 = (originalPrice: number, type: string) => {
  switch (type) {
    case 'pre-sale':
      return originalPrice * 0.8;
    case 'promotion':
      if (originalPrice < 100) {
        return originalPrice * 0.9;
      } else {
        return originalPrice - 15;
      }
    case 'black-friday':
      if (originalPrice >= 100 && originalPrice < 200) {
        return originalPrice - 20;
      } else if (originalPrice >= 200) {
        return originalPrice - 50;
      } else {
        return originalPrice * 0.8;
      }
    default:
      return originalPrice;
  }
};

/** -----------------------------------分割线-------------------------------- */

/**
 * 策略-预售商品价格规则
 * @param {*} originalPrice
 * @returns
 */
function preSalePrice(originalPrice: number) {
  return originalPrice * 0.8;
}
/**
 * 策略-促销商品价格规则
 * @param {*} originalPrice
 * @returns
 */
function promotionPrice(originalPrice: number) {
  if (originalPrice < 100) {
    return originalPrice * 0.9;
  } else {
    return originalPrice - 15;
  }
}
/**
 * 策略-黑色星期五促销规则
 * @param {*} originalPrice
 * @returns
 */
function blackFridayPrice(originalPrice: number) {
  if (originalPrice >= 100 && originalPrice < 200) {
    return originalPrice - 20;
  } else if (originalPrice >= 200) {
    return originalPrice - 50;
  } else {
    return originalPrice * 0.8;
  }
}
/**
 * 策略-默认商品价格
 * @param {*} originalPrice
 * @returns
 */
function defaultPrice(originalPrice: number) {
  return originalPrice;
}

/** 环境map 原始上下文对象*/ 
const priceStrategies: { [key: string]: (originalPrice: number) => number } = {
  'pre-sale': preSalePrice,
  'promotion': promotionPrice,
  'black-friday': blackFridayPrice,
  'default': defaultPrice,
};
/**
 * 应用函数
 * @param originalPrice
 * @param type
 * @returns
 */
const getPrice3 = (originalPrice: number, type: string) => {
  return priceStrategies[type]?.(originalPrice) || originalPrice;
};
export { getPrice1, getPrice2, getPrice3 };
